package com.momo.apachedoris.dao.vo;

import lombok.Data;

import java.io.File;

/**
 * @Author: Jie Li
 * @Date 2022-04-10 12:22
 * @Description: 需要添加其他参数，请阅读详细文档
 * https://docs.starrocks.com/zh-cn/main/loading/StreamLoad
 * @Version: 1.0
 * <p>Copyright: Copyright (c) 2022</p >
 **/
@Data
public class DorisSendDataVO {

    private DorisConnectionVO connection;
    //必填：表名
    private String table;
    //content和file 任选一入库内容  csv格式
    private String content;
    private File file;
    //入任务的标签，相同标签的数据无法多次导入,，如果没有指定，则系统会生成一个 UUID
    private String label;
    //用于指定导入文件中的列分隔符，默认为\t。如果是不可见字符，则需要加\x作为前缀，使用十六进制来表示分隔符。
    // 如Hive文件的分隔符\x01，需要指定为-H "column_separator:\x01"
    //NOTE: 需要进行url编码，譬如
    //需要指定'\t'为分隔符，那么应该传入'column_separator=%09'
    //需要指定'\x01'为分隔符，那么应该传入'column_separator=%01'
    //需要指定','为分隔符，那么应该传入'column_separator=%2c'
    private String column_separator = "%01";
    //用户指定导入文件中的行分隔符，默认为"\n"
    private String line_delimiter="\n";
    //用于指定导入文件中的列和 table 中的列的对应关系
    //忽略哪些字段不导入，改字段会被置为null，而不是空字符串
    //order_id,user_id,create_time,order_state,xxx
    private String columns;

    //导入内存限制。默认为 2GB。单位为字节。
    private String exec_mem_limit;

    //指定导入数据格式。支持 csv 和 json 两种格式。默认为 csv
    private String format = CSV;
    public static final String CSV = "csv";
    public static final String JSON = "json";
    //支持csv文件行首过滤
    public static final String SCV_WITH_NAMES = "csv_with_names";
    //支持csv文件前两行过滤
    public static final String SCV_WITH_NAMES_AND_TYPES = "csv_with_names_and_types";
    public static final String PARQUET = "parquet";
    public static final String ORC = "orc";
    //选择每一列的json路径
    private String jsonpaths;
    //这里最外层有一对表示 json array 的中括号 [ ]，导入时就需要指定 strip_outer_array = true
    private Boolean strip_outer_array;


    /**
     * 数据的合并类型，一共支持三种类型APPEND、DELETE、MERGE 其中，APPEND是默认值，表示这批数据全部需要追加到现有数据中，
     * DELETE 表示删除与这批数据key相同的所有行，MERGE 语义 需要与delete 条件联合使用，表示满足delete 条件的数据按照DELETE
     * 语义处理其余的按照APPEND 语义处理， 示例：-H "merge_type: MERGE" -H "delete: flag=1"
     */
    private String merge_type;
    /**
     * 仅在 MERGE下有意义， 表示数据的删除条件 function_column.sequence_col:
     * 只适用于UNIQUE_KEYS,相同key列下，保证value列按照source_sequence列进行REPLACE,
     * source_sequence可以是数据源中的列，也可以是表结构中的一列
     */
    private String delete;
    //function_column.sequence_col
    private String sequence_col;
    public static final String APPEND = "APPEND";
    //按照主键进行删除，如果有不为null的字段，需要加上数据
    public static final String DELETE = "DELETE";
    public static final String MERGE = "MERGE";

    //布尔类型，为true表示json将以第一行为schema 进行解析，开启这个选项可以提高 json 导入效率，
    // 但是要求所有json 对象的key的顺序和第一行一致， 默认为false，仅用于json 格式
    private Boolean fuzzy_parse;
    //布尔类型，为true表示在解析json数据时会将数字类型转为字符串，然后在确保不会出现精度丢失的情况下进行导入。
    private Boolean num_as_string;
}
